package com.itheima.edu.info.manager.controller;

import com.itheima.edu.info.manager.domain.Cleaner;
import com.itheima.edu.info.manager.service.CleanerService;

import java.util.Scanner;

/*
    客服接待类:专门用来和用户打交道的类
        1.接收用户键盘录入的数据       ---用户请求
        2.找业务员完成具体的业务功能操作
        3.根据业务员的反馈结果,来给出用户相关的一个响应信息
 */
public abstract class BaseCleanerController {
    private CleanerService cleanerService = new CleanerService();
    private Scanner sc = new Scanner(System.in);

    //用来开启清洁工管理系统,并展示清洁工管理系统菜单
    public void start() {
        studentLoop:
        while (true) {
            System.out.println("--------欢迎来到 <清洁工> 管理系统--------");
            System.out.println("请输入您的选择: 1.添加清洁工  2.删除清洁工  3.修改清洁工  4.查看清洁工  5.退出");
            String choice = sc.next();
            switch (choice) {
                case "1":
                    //System.out.println("添加清洁工");
                    addCleaner();
                    break;
                case "2":
                    //System.out.println("删除清洁工");
                    deleteCleanerByCid();
                    break;
                case "3":
                    //System.out.println("修改清洁工");
                    updateCleanerByCid();
                    break;
                case "4":
                    //System.out.println("查看清洁工");
                    findAllCleaner();
                    break;
                case "5":
                    System.out.println("感谢您使用清洁工管理系统,再见!");
                    break studentLoop;
                //return;   //return是结束当前方法
                default:
                    System.out.println("您的输入有误,请重新输入!");
                    break;
            }
        }
    }

    //添加清洁工功能
    public void addCleaner() {
        String cid;
        while (true) {
            System.out.println("请输入工号:");
            cid = sc.next();
            //1.1调用业务员的判断工号是否存在的方法进行业务分析
            boolean flag = cleanerService.isExists(cid);
            if (flag) {
                //存在,那就不能用,重新输入吧
                System.out.println("工号已被占用,请重新输入!");
            } else {
                //不存在,则结束死循环,让程序继续往下执行
                break;
            }
        }
        //录入清洁工信息
        Cleaner cleaner = inputCleanerInfo(cid);
        //3.根据业务员反馈的结果,输出提示信息到控制台
        boolean res = cleanerService.addCleaner(cleaner);
        if (res) {
            System.out.println("添加成功!");
        } else {
            System.out.println("添加失败!");
        }
    }

    //删除清洁工功能
    public void deleteCleanerByCid() {
        Cleaner[] cleaners = paiNull();
        if (cleaners == null) return;
        String cid = inputClenaerId();
        cleanerService.deleteCleanerByCid(cid);
        System.out.println("删除成功!");
    }

    //修改清洁工功能
    public void updateCleanerByCid() {
        //1.让业务员去进行查询业务,把查到的结果拿到
        //创建清洁工数组
        Cleaner[] cleaners = paiNull();
        if (cleaners == null) return;
        String cid = inputClenaerId();
        //程序能执行到这儿,说明用户输入了一个存在的id,这时候我们开始让用户输入要修改的新信息
        Cleaner cleaner = inputCleanerInfo(cid);
        //调用业务员中的updateCleanerByCid方法,进行修改业务
        cleanerService.updateCleanerByCid(cid, cleaner);
        System.out.println("修改成功!");
    }

    //查找所有清洁工功能
    public void findAllCleaner() {
        //1.让业务员去进行查询业务,把查到的结果拿到
        //创建清洁工数组
        Cleaner[] cleaners = paiNull();
        if (cleaners == null) return;
        //输出清洁工表头
        //有数据,我们就展示数据
        //先展示表头数据
        System.out.println("工号\t\t姓名\t\t年龄\t\t生日\t\t");
        //遍历清洁工数组
        for (int i = 0; i < cleaners.length; i++) {
            //将i索引的数据添加到清洁工对象中
            Cleaner cleaner = cleaners[i];
            //判断当前索引位置的元素是否为null,不为null的才展示
            //如果清洁工对象不为空则输出清洁工
            if (cleaner != null) {
                System.out.println(cleaner.getId() + "\t\t" + cleaner.getName() + "\t\t" + cleaner.getAge() + "\t\t\t" + cleaner.getBirthday());
            }
        }
    }

    //排除数组为空的可能并提示无信息添加后再试
    public Cleaner[] paiNull() {
        //1.让业务员去进行查询业务,把查到的结果拿到
        //创建清洁工数组
        Cleaner[] cleaners = cleanerService.findAllStudent();
        //2.根据业务员的查询结果,来给用户进行不同的数据展示
        //如果清洁工组为空则提示用户输入后重试
        if (cleaners == null) {
            //说明系统没有数据,提示用户先去添加
            System.out.println("查无信息,请添加信息后重试!");
            return null;
        }
        return cleaners;
    }

    //键盘录入一个存在的清洁工id
    public String inputClenaerId() {
        String cid;
        while (true) {
            System.out.println("请输入要删除的清洁工id:");
            cid = sc.next();
            boolean exists = cleanerService.isExists(cid);
            if (exists) {
                break;
            } else {
                System.out.println("您输入的id不存在,请重新输入");
            }
        }
        return cid;
    }

    //接收一个id,并让用户键盘录入清洁工的其他信息,封装清洁工对象并返回
    public abstract Cleaner inputCleanerInfo(String cid);
}
